Use case: SPI transmit/receive in interrupt mode

Sequence diagram

SPI transmit/receive in interrupt mode

  @startuml
  "Application"->"SPI" : HAL_SPI_TransmitReceive_IT(&hspi1, pTxData, RxBuffer, DATA_TO_SEND)
  "SPI" --> "Application" : HAL_OK

  "SPI IRQHandler" <- : SPI interrupt
  "SPI" <- "SPI IRQHandler" : HAL_SPI_IRQHandler(&hspi1)

  "Application" <- "SPI" : HAL_SPI_RegisterCallback(&hspi1, HAL_SPI_TX_RX_COMPLETE_CB_ID, USER_SPI_TxRxCpltCallback)
  @enduml

Code snippet

HAL1

HAL2

#define DATA_TO_SEND   256
#define DATA_TO_RECEIVE DATA_TO_SEND
SPI_HandleTypeDef hspi1;

uint8_t aTxBuffer[] = "*** SPI communication based on IT mode***"
uint8_t aRxBuffer[DATA_TO_RECEIVE]

HAL_SPI_RegisterCallback(&hspi1, HAL_SPI_TX_RX_COMPLETE_CB_ID, USER_SPI_TxRxCpltCallback);

HAL_SPI_TransmitReceive_IT(&hspi1, pTxData, &RxBuffer, DATA_TO_SEND);
#define DATA_TO_SEND   256
#define DATA_TO_RECEIVE DATA_TO_SEND
hal_spi_handle_t hspi1;

uint8_t aTxBuffer[] = "*** SPI communication based on IT mode***"
uint8_t aRxBuffer[DATA_TO_RECEIVE]

HAL_SPI_RegisterTxRxCpltCallback(&hspi1, USER_SPI_TxRxCpltCallback);

HAL_SPI_TransmitReceive_IT(&hspi1, aTxBuffer, aRxBuffer, DATA_TO_RECEIVE);

Key changes

  1. TX/RX complete callback registration changes from HAL_SPI_RegisterCallback(..., HAL_SPI_TX_RX_COMPLETE_CB_ID, ...) to HAL_SPI_RegisterTxRxCpltCallback().

  2. HAL2 uses hal_spi_handle_t instead of SPI_HandleTypeDef.